package city.spring.modules.work.action.model;

/**
 * 排班方案的上班班次信息
 *
 * @author HouKunLin
 * @date 2020/6/24 0024 10:22
 */
public abstract class AbstractPlanShift<SHIFT> {
    /**
     * 自动配置的上班人数
     */
    private int autoWorkNumber = -1;

    /**
     * 该班次的唯一Key
     *
     * @return 唯一键值
     */
    public abstract Object getKey();

    /**
     * 该班次的名称
     *
     * @return 班次名称
     */
    public abstract String getTitle();

    /**
     * 该班次上班人数，为-1时自动根据人数计算
     *
     * @return 上班人数
     */
    public abstract int getWorkNumber();

    /**
     * 判断次日是否不用上班
     *
     * @return true 不用上班，false 需要上班
     */
    public abstract boolean isTomorrowNotWork();

    /**
     * 获取原始对象
     *
     * @return 原始对象
     */
    public abstract SHIFT getObject();

    /**
     * 获取自动配置该班次上班人数
     *
     * @return 上班人数
     */
    public final int getAutoWorkNumber() {
        return autoWorkNumber;
    }

    /**
     * 设置自动配置该班次上班人数
     *
     * @param autoWorkNumber 该班次上班人数
     */
    public final void setAutoWorkNumber(int autoWorkNumber) {
        this.autoWorkNumber = autoWorkNumber;
    }

    @Override
    public boolean equals(Object object) {
        if (object instanceof AbstractPlanShift) {
            AbstractPlanShift<?> planShift = (AbstractPlanShift<?>) object;
            Object key1 = this.getKey();
            Object key2 = planShift.getKey();
            return key1 != null && key1.equals(key2);
        }
        return false;
    }

    @Override
    public String toString() {
        return String.format("%s(%s/%s)", getTitle(), getWorkNumber(), getAutoWorkNumber());
    }
}
